/**
 * Fichier ValidationRenderer.java : Définition de classe
 * fr.unice.gnpt.gui.util.ValidationRenderer : Classe permettant de créer un
 * gestionnaire de rendu des cellules d'une JTable selon certains critères
 * 
 * Auteurs : Groupe GNPT : Gastinel, Nicolas, Pellegrino, Trovato
 */
package fr.unice.gnpt.gui.util;

import java.awt.Color;
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;

import fr.unice.gnpt.core.Enseignement;
import fr.unice.gnpt.core.Service;

/**
 * Classe permettant de créer un gestionnaire de rendu des cellules d'une JTable
 * selon certains critères.
 * <p>
 * Dans notre cas on aura une coloration des cellules différente suivant les
 * trois cas suivants :
 * <ul>
 * <li>Orange si un service est en conflit</li>
 * <li>Vert si un service est validé</li>
 * <li>Blanc sinon</li>
 * </ul>
 * 
 * @author gnpt
 * @version 0.0.1
 */
public class ValidationRenderer extends DefaultTableCellRenderer {
	private static final long serialVersionUID = 1L;
	private TableCellRenderer renderer;
	/**
	 * Couleurs suivant l'état du service.
	 */
	public static Color[] couleurs = { Color.WHITE, new Color(255, 204, 102),
			new Color(51, 255, 102), new Color(210, 210, 210), Color.BLACK };

	/**
	 * Constructeur par défaut.
	 * 
	 * @param r
	 *            Renderer par défaut.
	 */
	public ValidationRenderer(TableCellRenderer r) {
		this.renderer = r;
	}

	/**
	 * @see javax.swing.table.DefaultTableCellRenderer#getTableCellRendererComponent(javax.swing.JTable,
	 *      java.lang.Object, boolean, boolean, int, int)
	 */
	@SuppressWarnings("unchecked")
	@Override
	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {

		Component c = this.renderer.getTableCellRendererComponent(table, value,
				isSelected, hasFocus, row, column);

		Service s = ((ServiceTableModel<Service>) table.getModel())
				.getDonneeAt(table.convertRowIndexToModel(row));

		if (table.getSelectedRow() == row) {
			c.setBackground(ValidationRenderer.couleurs[3]);
		} else if (s.estValide()) {
			c.setBackground(ValidationRenderer.couleurs[2]);
		} else if ((s instanceof Enseignement)
				&& ((Enseignement) s).getCours().estEnConflit((Enseignement) s)) {
			c.setBackground(ValidationRenderer.couleurs[1]);
		} else {
			c.setBackground(ValidationRenderer.couleurs[0]);
		}

		return c;
	}
}
